package br.sddp.controle;

import java.io.Serializable;
import java.util.List;

import javax.faces.application.Application;
import javax.faces.application.ViewHandler;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.component.UIViewRoot;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;

import br.sddp.dao.DuvidaDAO;
import br.sddp.dao.UsuarioDAO;
import br.sddp.modelo.Duvida;
import br.sddp.util.WebUtil;

@SessionScoped
@ManagedBean
public class DuvidaBean implements Serializable {

	/**
	 * serialVersionUID = 7210341691276030671L
	 */
	private static final long serialVersionUID = 7210341691276030671L;

	private String titulo;
	private String descricao;
	private String usuarioLogin;
	private Integer idUsuarioLogado;
	private List<Duvida> duvidas;
	private List<Duvida> respondidas;
	private List<Duvida> todasDuvidas;
	private List<Duvida> respondidasUsuario;
	private List<Duvida> duvidasAbertas;
	private int id;

	private Duvida duvidaTemp = new Duvida();	

	public void postarDuvida() {

		//Usada para registra a msg de resultado da operacao
		String msg;

		//Obtem o login do usuario que esta armazenado em uma sessao
		ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext();
		HttpSession sessao = (HttpSession) ec.getSession(true);
		this.usuarioLogin = sessao.getAttribute("usuario").toString();
		this.idUsuarioLogado = Integer.parseInt(sessao.getAttribute("id").toString());

		//Cria a entidade duvida
		UsuarioDAO usuarioDAO = new UsuarioDAO();
		Duvida duvida = new Duvida(this.titulo, this.descricao, usuarioDAO.recuperarUsuario(this.idUsuarioLogado), false, WebUtil.getUsuarioLogado());		
		DuvidaDAO duvidaDAO = new DuvidaDAO();

		//Cadastra a duvida no banco.
		if(duvidaDAO.cadastrar(duvida)) {
			msg = "Operação realizada com sucesso.";
		}
		else {
			msg = "Ocorreu um erro ao enviar sua duvida, por favor tente mais tarde, ou entre em contato com o administrador.";
		}

		WebUtil.enviarMsg(msg);
	}

	public void limpar() {
		refresh();
		this.duvidaTemp = new Duvida();
	}


	public void refresh() {
		FacesContext context = FacesContext.getCurrentInstance();
		Application application = context.getApplication();
		ViewHandler viewHandler = application.getViewHandler();
		UIViewRoot viewRoot = viewHandler.createView(context, context.getViewRoot().getViewId());
		context.setViewRoot(viewRoot);
		context.renderResponse(); //Optional
	}


	public String getTitulo() {
		return titulo;
	}

	public void setTitulo(String titulo) {
		this.titulo = titulo;
	}

	public String getDescricao() {
		return descricao;
	}

	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}

	public String getUsuarioLogin() {
		return usuarioLogin;
	}

	public void setUsuarioLogin(String usuarioLogin) {
		this.usuarioLogin = usuarioLogin;
	}

	public Integer getIdUsuarioLogado() {
		return idUsuarioLogado;
	}

	public void setIdUsuarioLogado(Integer idUsuarioLogado) {
		this.idUsuarioLogado = idUsuarioLogado;
	}

	public List<Duvida> getDuvidas() {

		DuvidaDAO duvidaDAO = new DuvidaDAO();
		this.duvidas = duvidaDAO.listarNaoRespondidas();

		return this.duvidas;
	}

	public void setDuvidas(List<Duvida> duvidas) {
		this.duvidas = duvidas;
	}

	public List<Duvida> getRespondidas() {

		DuvidaDAO duvidaDAO = new DuvidaDAO();
		this.respondidas = duvidaDAO.listarRespondidas();

		return respondidas;
	}

	public void setRespondidas(List<Duvida> respondidas) {
		this.respondidas = respondidas;
	}

	public List<Duvida> getTodasDuvidas() {

		DuvidaDAO duvidaDAO = new DuvidaDAO();
		this.todasDuvidas = duvidaDAO.listarDuvidas();
		return todasDuvidas;
	}

	public void setTodasDuvidas(List<Duvida> todasDuvidas) {
		this.todasDuvidas = todasDuvidas;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}


	public Duvida getDuvidaTemp() {
		return duvidaTemp;
	}


	public void setDuvidaTemp(Duvida duvidaTemp) {
		refresh();
		this.duvidaTemp = duvidaTemp;
	}

	public List<Duvida> getRespondidasUsuario() {

		DuvidaDAO dao = new DuvidaDAO();
		respondidasUsuario = dao.listarRespondidasPorUsuario(WebUtil.getUsuarioLogado().getIdUsuario());
		
		return respondidasUsuario;
	}

	public void setRespondidasUsuario(List<Duvida> respondidasUsuario) {
		this.respondidasUsuario = respondidasUsuario;
	}

	public List<Duvida> getDuvidasAbertas() {
		DuvidaDAO duvidaDAO = new DuvidaDAO();
		duvidasAbertas = duvidaDAO.listarNaoRespondidasPorUsuario(WebUtil.getUsuarioLogado().getIdUsuario());
		
		return duvidasAbertas;
	}

	public void setDuvidasAbertas(List<Duvida> duvidasAbertas) {
		this.duvidasAbertas = duvidasAbertas;
	}
}
